module NiosIITemplate
(  
	input clk,
	input rst_n,
	input S1,S2,S3,S4,
	output [3:0] LED,
	input SW1,SW2,      
	inout  [3:0] KEY_H,
	inout [3:0]  KEY_L,
	output wire [11:0] sdram_wire_addr,                      //    sdram_wire.addr
	output wire [1:0]  sdram_wire_ba,                        //              .ba
	output wire        sdram_wire_cas_n,                     //              .cas_n
	output wire        sdram_wire_cke,                       //              .cke
	output wire        sdram_wire_cs_n,                      //              .cs_n
	inout  wire [15:0] sdram_wire_dq,                        //              .dq
	output wire [1:0]  sdram_wire_dqm,                       //              .dqm
	output wire        sdram_wire_ras_n,                     //              .ras_n
	output wire        sdram_wire_we_n  ,                   //              .we_n
	output wire 	    SDRAMclk,
	input epcs_data,
	output epcs_sdo,
	output epcs_dclk,
	output epcs_sce,
	output pwm_out ,
	input sig_in,
	output lcdcs,
	output lcdrst,
	output lcdrs,
	output lcdspi_mosi,
	output lcdspi_sclk,
	output lcdleda,
	output reg[13:0]signalout,
	output clkout
);
assign clkout=clkfc;
wire siginaltap;
wire clk_100M,clkfc;

pll	pll_inst (
	.inclk0 ( clk ),
	.c0 ( clk_100M ),
	.c1 ( SDRAMclk ),
	.c2 ( siginaltap ),
	.c3 ( clkfc )
	);

wire lcdspi_miso;
NiosII u0 (
    .clk_clk          (clk_100M),          //        clk.clk
    .reset_reset_n    (rst_n),    //      reset.reset_n
	 .sdram_wire_addr(sdram_wire_addr) ,	// output [11:0] sdram_wire_addr_sig
	 .sdram_wire_ba(sdram_wire_ba) ,	// output [1:0] sdram_wire_ba_sig
	 .sdram_wire_cas_n(sdram_wire_cas_n) ,	// output  sdram_wire_cas_n_sig
	 .sdram_wire_cke(sdram_wire_cke) ,	// output  sdram_wire_cke_sig
	 .sdram_wire_cs_n(sdram_wire_cs_n) ,	// output  sdram_wire_cs_n_sig
	 .sdram_wire_dq(sdram_wire_dq) ,	// inout [15:0] sdram_wire_dq_sig
	 .sdram_wire_dqm(sdram_wire_dqm) ,	// output [1:0] sdram_wire_dqm_sig
	 .sdram_wire_ras_n(sdram_wire_ras_n) ,	// output  sdram_wire_ras_n_sig
	 .sdram_wire_we_n(sdram_wire_we_n) ,	// output  sdram_wire_we_n_sig
    .epcs_dclk        (epcs_dclk),        //       epcs.dclk
    .epcs_sce         (epcs_sce),         //           .sce
    .epcs_sdo         (epcs_sdo),         //           .sdo
    .epcs_data0       (epcs_data),       //           .data0
    .bus_wr_n         (bus_wr_n),         //        bus.wr_n
    .bus_rd_n         (bus_rd_n),         //           .rd_n
    .bus_addr         (bus_addr),         //           .addr
    .bus_data_out     (bus_data_wr),     //           .data_out
    .bus_data_in      (bus_data_rd),       //           .data_in
	 .key4x4irq_export (key_irq_connect), //  key4x4irq.export
    .key4x4_KEY_H     (KEY_H),     //     key4x4.KEY_H
    .key4x4_KEY_L     (KEY_L),     //           .KEY_L
    .key4x4_irq       (key_irq_connect),        //           .irq
	 .lcdspi_MISO      (lcdspi_miso),      //     lcdspi.MISO
    .lcdspi_MOSI      (lcdspi_mosi),      //           .MOSI
    .lcdspi_SCLK      (lcdspi_sclk),      //           .SCLK
    .lcdspi_SS_n      (lcdcs),      //           .SS_n
    .lcdrs_export     (lcdrs),     //      lcdrs.export
    .lcdrst_export    (lcdrst),    //     lcdrst.export
    .lcdleda_export   (lcdleda),      //      lcdcs.export
	 .flag1_export(flag), 	// output [3:0] flag1_export_sig
	 .date_k_export(sine_date_k) ,	// output [31:0] date_k_export_sig
	 .am_date_k_export(AM_date_k) ,	// output [31:0] am_date_k_export_sig
	 .k_export(k) ,	// output [13:0] k_export_sig
	 .b_export(b) ,	// output [13:0] b_export_sig
	 .fm_fate_k_export(FM_date_k) ,	// output [31:0] fm_fate_k_export_sig
	 .shift_export(shift) 	// output [3:0] shift_export_sig
);
wire key_irq_connect;
wire[31:0]sine_date_k;
wire[13:0]date_sine;
dds_sine dds_sine_inst
(
	.clkfc(clkfc) ,	// input  clkfc_sig
	.rst_n(rst_n) ,	// input  rst_n_sig
	.date_k(sine_date_k) ,	// input [31:0] date_k_sig
	.date_sine(date_sine) 	// output [13:0] date_sine_sig
);
wire [31:0]AM_date_k;
wire [13:0]date_AM_final;    
wire [13:0]k,b;
dds_AM dds_AM_inst
(
	.clkfc(clkfc) ,	// input  clkfc_sig
	.rst_n(rst_n) ,	// input  rst_n_sig
	.AM_date_k(AM_date_k) ,	// input [31:0] AM_date_k_sig
	.k(k) ,	// input [13:0] k_sig
	.b(b) ,	// input [13:0] b_sig
	.date_AM_final(date_AM_final) 	// output [13:0] date_AM_final_sig
);
wire [31:0]FM_date_k;
wire [13:0]date_sin_FM;
wire [3:0]shift;
dds_FM dds_FM_inst
(
	.clkfc(clkfc) ,	// input  clkfc_sig
	.rst_n(rst_n) ,	// input  rst_n_sig
	.shift(shift) ,	// input [3:0] shift_sig
	.FM_date_k(FM_date_k) ,	// input [31:0] FM_date_k_sig
	.date_sin_FM(date_sin_FM) 	// output [13:0] date_sin_FM_sig
);
wire [13:0]date_sin_ASK;
dds_ASK dds_ASK_inst
(
	.clkfc(clkfc) ,	// input  clkfc_sig
	.rst_n(rst_n) ,	// input  rst_n_sig
	.date_sin_100k(date_sin_ASK) 	// output [13:0] date_sin_100k_sig
);
wire[13:0]date_sin_PSK;
dds_PSK dds_PSK_inst
(
	.rst_n(rst_n) ,	// input  rst_n_sig
	.clkfc(clkfc) ,	// input  clkfc_sig
	.date_sin_100k(date_sin_PSK) 	// output [13:0] date_sin_100k_sig
);
wire [3:0]flag;
always@(posedge clk)  begin
 case(flag)
 4'd3:signalout<=date_sine;
 4'd4:signalout<=date_AM_final;
 4'd5:signalout<=date_sin_FM;
 4'd6:signalout<=date_sin_ASK;
 4'd7:signalout<=date_sin_PSK;
 default:signalout<=date_sine;
 endcase
end
 
endmodule


